package com.cg.leetcode;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * 118.杨辉三角
 *
 * @program: LeetCode->LeetCode_118
 * @description: 118.杨辉三角
 * @author: cg
 * @create: 2021-09-03 21:22
 **/
public class LeetCode_118 {

    @Test
    public void test118() {
        System.out.println(generate(5));
    }

    /**
     * 给定一个非负整数 numRows，生成「杨辉三角」的前 numRows 行。
     * 在「杨辉三角」中，每个数是它左上方和右上方的数的和。
     * <p>
     * 示例 1:
     * 输入: numRows = 5
     * 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
     * <p>
     * 示例 2:
     * 输入: numRows = 1
     * 输出: [[1]]
     * <p>
     * 提示:
     * 1 <= numRows <= 30
     *
     * @param numRows
     * @return
     */
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        for (int i = 0; i < numRows; ++i) {
            List<Integer> row = new ArrayList<Integer>();
            for (int j = 0; j <= i; ++j) {
                if (j == 0 || j == i) {
                    row.add(1);
                } else {
                    row.add(ret.get(i - 1).get(j - 1) + ret.get(i - 1).get(j));
                }
            }
            ret.add(row);
        }
        return ret;
    }
    /*public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> res = new ArrayList();
        ArrayList<Integer> l1 = new ArrayList<>();
        l1.add(1);
        res.add(l1);
        if (numRows <= 1) {
            return res;
        }
        ArrayList<Integer> l2 = new ArrayList<>();
        l2.add(1);
        l2.add(1);
        res.add(l2);
        if (numRows <= 2) {
            return res;
        }
        for (int i = 2; i < numRows; i++) {
            List<Integer> list = new ArrayList<>();
            list.add(1);
            for (int j = 0; j < res.get(i - 2).size(); j++) {
                list.add(res.get(i - 1).get(j) + res.get(i - 1).get(j + 1));
            }
            list.add(1);
            res.add(list);
        }
        return res;
    }*/

}
